The field of network video streaming is steadily growing. The prevalence and increasing speed of networks has made viewing of video data interactively over a network increasingly feasible. By storing video on a central server and allowing access to the video via a streaming server to streaming clients, video can be accessed by a number of people simultaneously across a wide physical area. Video streaming is commonly used for accessing video data such as movie trailers, but can also be used for other networked arrangements such as digital video surveillance systems.
Video streaming protocols usually have a set of commands much akin to those traditionally used with video cassette recorders (VCRs). Common commands are: play from the beginning of the video or from a point in time, fast forward, rewind and pause. Some streaming server implementations also have non-VCR like commands such as reposition, which allows the streaming client to change the current play time of the streaming video without issuing another play request with the new time. Each command has a delay between when the streaming client issues the command until the effects of the command reach the streaming client. For instance there is a delay between issuing a play command and the video starting to arrive at the client.
Most video streaming clients have some form of timeline present in their user interface. The timeline serves two purposes in the client's user interface. Firstly the timeline has an indicator to show the current position within the video stream that is being displayed. The indicator is commonly called the “play head”. Secondly the timeline allows the user to quickly jump to a position within the video stream either by clicking on the timeline or dragging the play head to a different position on the timeline. This process of dragging the play head to a different position is commonly called video scrubbing or scrubbing the play head.
The solution traditionally used is for the client to reposition or restart the video stream when the user has released the play head. In such implementations, the client generally handles the updating of the play head in a way that consumes significant server resources and which introduces a significant delay between the user's action and the updating of the video window. The process is also entirely reactive in that the client does nothing to anticipate future user actions.